/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.figmania.controlador;

import br.figmania.Fachada.Fachada;
import br.figmania.modelo.Amizade;
import br.figmania.modelo.Usuario;
import br.figmania.repositorio.Dao;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.swing.JOptionPane;

/**
 *
 * @author Henrique
 */
public class AmizadeControlador {
    
    private Dao repositorio = new Dao();
    
    public void BuscarAmigos(String nome, HttpServletRequest request, HttpServletResponse response) throws IOException{
        
        HttpSession secao = request.getSession();
        Usuario usuario = (Usuario) secao.getAttribute("usuario");
        List <Amizade> amizades = (List <Amizade>) repositorio.listarObjeto("FROM Amizade WHERE id_solicitador = '"+Integer.toString(usuario.getId()) +"' AND aceite = 1");
        
        boolean status = this.ProcurarAmigoNaLista(amizades, nome, request);
        response.sendRedirect("meus_amigos.jsp");
        
    }
    
    
    private boolean ProcurarAmigoNaLista (List <Amizade> amizades, String nome, HttpServletRequest request){
        
        List<Amizade> amigosEncontrados = new ArrayList<Amizade>();
        HttpSession secao = request.getSession();
                     
        for (int contador = 0; contador < amizades.size(); contador++){
            
            if (amizades.get(contador).getConvidado().getNome().substring(0,1).equals(nome.substring(0,1))){
               
             amigosEncontrados.add(amizades.get(contador));  
             
                            
             
            }
                
                                  
        }
        
         
        if(amigosEncontrados.isEmpty()){
        secao.removeAttribute("amigos");
        return false;
        } else{ 
         
        secao.setAttribute("amigos", amigosEncontrados);
        return true; 
        }
    }
    
    public void excluiAmigo (HttpServletRequest request, String id_amizade)throws NullPointerException{
        
        HttpSession secao = request.getSession();
        Amizade amizade = null;
        int contador = 0;
        List<Amizade> listAmizade = (List<Amizade>) secao.getAttribute("amigos");
        
        try {
            
               while (contador < listAmizade.size()){
            
            if (listAmizade.get(contador).getId_amizade()== Integer.parseInt(id_amizade)){
                
                amizade = listAmizade.get(contador);
                listAmizade.remove(contador);
                
                break;
            }
            contador ++;            
            
        }
        boolean status = repositorio.deletarObjeto(amizade);
        secao.setAttribute("amigos", listAmizade);        
        }catch (NullPointerException e){
            
            listAmizade = (List<Amizade>) repositorio.listarObjeto("FROM Amizade WHERE id_amizade = '"+id_amizade+"'");
            boolean status = repositorio.deletarObjeto(listAmizade.get(0));
            
        }
        
    }
    
    public List listarTodosEmAmizade(String idUsuario){
         
        List<Usuario> amigosEncontrados = new ArrayList<Usuario>();
        
        amigosEncontrados = (List <Usuario>) repositorio.listarObjeto("FROM Usuario WHERE id != '"+idUsuario+"'");
        
        
        return amigosEncontrados;
        
        
    }
    
    
    public void convidarAmigo(String id_solicitador, String id_convidado,  HttpServletRequest request){
        
        Fachada fachada = Fachada.getInstance();
        HttpSession secao = request.getSession();
        Amizade amizade = new Amizade();
        Usuario [] usuarios = new Usuario[2];
        
        usuarios[0] = (Usuario) secao.getAttribute("usuario");
        usuarios[1] = fachada.getUsuarioControlador().buscarUmUsuario(id_convidado);
        
        amizade.setSolicitador(usuarios[0]);
        amizade.setConvidado(usuarios[1]);
        amizade.setAceite(0);
               
        boolean status = repositorio.inserirObjeto(amizade);
        if (status){
        JOptionPane.showMessageDialog(null, "Convite foi enviado!");
        }
        
                
    }
    
    public String verificaAmizade(String id_solicitador, int id_convidado){
        
        List <Amizade> amigos = (List<Amizade>) repositorio.listarObjeto("From Amizade WHERE (id_solicitador ='"+id_solicitador+"' AND id_convidado = '"+id_convidado+"')AND aceite =1 OR (id_solicitador='"+id_convidado+"' AND id_convidado='"+id_solicitador+"') AND aceite=1");
        
        return Integer.toString(amigos.get(0).getId_amizade());
        
        
    }
    
    
    public boolean verificaAmizade(int id_solicitador, int id_convidado){
        
        
        List <Amizade> amigos = (List<Amizade>) repositorio.listarObjeto("From Amizade WHERE (id_solicitador ='"+id_solicitador+"' AND id_convidado = '"+id_convidado+"')AND aceite =1 OR (id_solicitador='"+id_convidado+"' AND id_convidado='"+id_solicitador+"') AND aceite=1");
        
        
        if (amigos.isEmpty() || amigos==null){
             
           return false;
        } else {
           
           return true;
        }        
        
    }
    
    public boolean verificaSolicitacoes(int id_usuario){
        
        List <Amizade> amigos = (List<Amizade>) repositorio.listarObjeto("FROM Amizade WHERE id_convidado = '"+id_usuario+"' AND aceite = 0");
        if (amigos.isEmpty() || amigos==null){
            return false;
            
        }else{
            return true;
        }
        
    }
    
    public List listarSolicitacoes(int id_usuario){
        
        List <Amizade> amigos = (List<Amizade>) repositorio.listarObjeto("FROM Amizade WHERE id_convidado = '"+id_usuario+"' AND aceite = 0");
        
        return amigos;
        
    }
    
    public void aceitarSolicitacao(String id_amizade){
        
        List <Amizade> amizade = (List<Amizade>) repositorio.listarObjeto("FROM Amizade WHERE id_amizade = '"+id_amizade+"'");
        
        amizade.get(0).setAceite(1);
        
        boolean status = repositorio.atualizarObjeto(amizade.get(0));
        
        
        
    }
    
    
    
    
    
}
